// 树结构初始化加载
var setting = {
    view: { selectedMulti: false }, data: { key: { title: "title", name: "DepName" }, simpleData: { enable: true, idKey: "Id", pIdKey: "ParentId", rootPId: 0 } },
    callback: {
        onClick: function (event, treeId, treeNode) {
            var treeId = treeNode.Id;
            var treeName = treeNode.DepName;
            $("#treeId").val(treeId);
            $("#treeName").val(treeName);
        }
    }
}, tree, loadTree = function () {
    $.get("/Departments/treeData", function (data) {
        var treeName = $("#treeName").val();
        tree = $.fn.zTree.init($("#tree"), setting, data);
        // 展开第一级节点
        var nodes = tree.getNodesByParam("level", 0);
        for (var i = 0; i < nodes.length; i++) {
            tree.expandNode(nodes[i], true, false, false);
            selectCheckNode(treeName, nodes[i]);
        }
        // 展开第二级节点
        nodes = tree.getNodesByParam("level", 1);
        for (var i = 0; i < nodes.length; i++) {
            tree.expandNode(nodes[i], true, false, false);
            selectCheckNode(treeName, nodes[i]);
        }
        // 展开第二级节点
        nodes = tree.getNodesByParam("level", 2);
        for (var i = 0; i < nodes.length; i++) {
            tree.expandNode(nodes[i], true, false, false);
            selectCheckNode(treeName, nodes[i]);
        }
    }, null, null, "正在加载，请稍后...");
};

$(function () {
    loadTree();
});

function selectCheckNode(treeName, node) {
    if (treeName == node.name) {
        tree.selectNode(node, true);
    }
}

$('#btnExpand').click(function () {
    tree.expandAll(true);
});
$('#btnCollapse').click(function () {
    tree.expandAll(false);
});

function loadUser() {
    var treeId = $("#treeId").val();
    var treeName = $("#treeName").val();
    parent.$("#treeId").val(treeId);
    parent.$("#treeName").val(treeName);
    var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
    parent.layer.close(index);
}

var lastValue = "", nodeList = [], key = $("#keyword");
key.bind("focus", focusKey).bind("blur", blurKey).bind("change cut input propertychange", searchNode);
key.bind("keydown", function (e) { if (e.which == 13) { searchNode(); } });

function focusKey(e) {
    if (key.hasClass("empty")) {
        key.removeClass("empty");
    }
}

function blurKey(e) {
    if (key.get(0).value === "") {
        key.addClass("empty");
    }
    searchNode(e);
}

function searchNode() {
    var value = $.trim(key.get(0).value);
    var keyType = "DepName";
    if (lastValue === value) {
        return;
    }
    lastValue = value;
    var nodes = tree.getNodes();
    if (value == "") {
        showAllNode(nodes);
        return;
    }
    hideAllNode(nodes);
    nodeList = tree.getNodesByParamFuzzy(keyType, value);
    updateNodes(nodeList);
}

function hideAllNode(nodes) {
    var tree = $.fn.zTree.getZTreeObj("tree");
    nodes = tree.transformToArray(nodes);
    for (var i = nodes.length - 1; i >= 0; i--) {
        tree.hideNode(nodes[i]);
    }
}

function showAllNode(nodes) {
    nodes = tree.transformToArray(nodes);
    for (var i = nodes.length - 1; i >= 0; i--) {
        if (nodes[i].getParentNode() != null) {
            tree.expandNode(nodes[i], false, false, false, false);
        } else {
            tree.expandNode(nodes[i], true, true, false, false);
        }
        tree.showNode(nodes[i]);
        showAllNode(nodes[i].children);
    }
}

function updateNodes(nodeList) {
    tree.showNodes(nodeList);
    for (var i = 0, l = nodeList.length; i < l; i++) {
        var treeNode = nodeList[i];
        showChildren(treeNode);
        showParent(treeNode)
    }
}

function showChildren(treeNode) {
    if (treeNode.isParent) {
        for (var idx in treeNode.children) {
            var node = treeNode.children[idx];
            tree.showNode(node);
            showChildren(node);
        }
    }
}
function showParent(treeNode) {
    var parentNode;
    while ((parentNode = treeNode.getParentNode()) != null) {
        tree.showNode(parentNode);
        tree.expandNode(parentNode, true, false, false);
        treeNode = parentNode;
    }
}

function search($this) {
    $('#search').slideToggle(200);
    $('#btnShow').toggle();
    $('#btnHide').toggle();
    $('#keyword').focus();
}